import vue from 'rollup-plugin-vue';  // 处理 Vue 文件
import { terser } from 'rollup-plugin-terser';  // 压缩
import resolve from '@rollup/plugin-node-resolve';  // 解析 node_modules 中的包
import commonjs from '@rollup/plugin-commonjs';  // 处理 CommonJS 模块
import postcss from 'rollup-plugin-postcss';  // 处理 CSS 和 LESS
import less from 'less';  // LESS 编译器
import babel from '@rollup/plugin-babel';  // 转译 ES6 代码

export default {
  input: 'src/index.js',  // 项目入口文件
  output: [
    {
      format: 'esm',
      file: 'dist/my-vue3-taro-library.esm.js',
      banner: `import './dist/styles.css';`,  // 将postcss处理后的css注入到js中，方便用户不再单独引入
    },
    {
      format: 'umd',
      name: 'MyVue3TaroLibrary',
      file: 'dist/my-vue3-taro-library.umd.js',
      banner: `import './dist/styles.css';`,  // 将postcss处理后的css注入到js中，方便用户不再单独引入
    }
  ],
  plugins: [
    vue({
      css: true,  // 提取 CSS
      compileTemplate: true,  // 编译 Vue 模板
    }),
    resolve(),  // 解析依赖
    commonjs(),  // 处理 CommonJS 模块
    postcss({
      extract: 'dist/styles.css',  // 提取到 dist/styles.css
      plugins: [
        require('autoprefixer')(),  // 自动添加 CSS 前缀
      ],
      use: [
        ['less', { javascriptEnabled: true }]  // 使用 less 处理 LESS 文件，允许 Javascript 语法
      ]
    }),
    babel({
      exclude: 'node_modules/**',  // 排除 node_modules 文件夹
      presets: ['@babel/preset-env'],  // 使用 Babel 编译
      babelHelpers: 'bundled',  // Babel 编译帮助
    }),
    terser(),  // 压缩打包文件
  ],
  external: ['vue', '@tarojs/taro'],  // 将 Vue 和 Taro 设置为外部依赖
  resolve: {
    alias: {
      vue: 'vue/dist/vue.esm-bundler.js',  // 使用完整版的 Vue 3
      '@tarojs/taro': 'node_modules/@tarojs/taro',  // 确保使用正确版本的 Taro
    },
  },
  watch: {
    include: 'src/**',  // 监听源代码文件的变化
  },
};
